package com.spsoft.vatoutinv.service.matchflow;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.spsoft.core.model.Result;
import com.spsoft.core.model.bo.TokenUser;
import com.spsoft.vatoutinv.model.dto.matchflow.*;
import com.spsoft.vatoutinv.model.vo.matchflow.VmsMatchFlowApplyVo;
import com.spsoft.vatoutinv.model.vo.matchflow.VmsMatchInvoiceInfoVo;
import com.spsoft.vatoutinv.model.vo.matchflow.VmsMatchInvoicePageVo;
import com.spsoft.vatoutinv.model.vo.matchflow.VmsMatchRecordVo;
import com.spsoft.vatoutinv.model.vo.vmstransactionflowinvoice.VmsTransactionFlowInvoicePageVo;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * 手工匹配流水 服务类
 *
 * @author : chenxudong
 * @date : 2024/6/25 11:07
 */
public interface VmsMatchFlowService {

    /**
     * 手工匹配流水主页面-分页查询
     * @param pageDto 查询条件
     */
    Result<IPage<VmsMatchFlowApplyVo>> pageApply(VmsMatchFlowPageDto pageDto);

    /**
     * 手工匹配流水主页面-数据导出
     * @param pageDto 查询条件
     */
    void export(VmsMatchFlowPageDto pageDto, HttpServletResponse response);

    /**
     * 发票信息查询页面-分页查询
     * @param pageDto 查询条件
     */
    Result<IPage<VmsMatchInvoicePageVo>> pageInvoice(VmsMatchInvoicePageDto pageDto);

    /**
     * 新增子界面-快速添加
     * @param fpdm 发票代码
     * @param fphm 发票号码
     * @param applyId 审批流id
     * @param tokenUser 登录用户信息
     */
    Result<VmsMatchInvoiceInfoVo> fastAdd(String fpdm, String fphm, Long applyId, TokenUser tokenUser);

    /**
     * 查询手工匹配流水信息详情-流程使用
     * @param applyId 审批流id
     */
    Result<VmsMatchInvoiceInfoVo> getApplyDetail(Long applyId);

    /**
     * 查询手工匹配流水信息详情-页面使用
     * @param matid 匹配流水记录id
     */
    Result<VmsMatchRecordVo> getMatchDetail(Long matid);

    /**
     * 根据发票明细查询已匹配的交易流水-分页查询
     * @param pageDto 查询条件
     */
    Result<IPage<VmsTransactionFlowInvoicePageVo>> queryFlowByItem(VmsItemFlowPageDto pageDto);

    /**
     * 匹配流水/手工匹配-分页查询可匹配流水
     * @param pageDto 查询条件
     */
    Result<IPage<VmsTransactionFlowInvoicePageVo>> queryFlowByAutoOrHand(VmsQueryMatchFlowPageDto pageDto);

    /**
     * 匹配流水/手工匹配-匹配流水
     * @param dto 发票明细匹配流水dto
     */
    Result<Object> itemMatchFlow(VmsItemMatchFlowDto dto, TokenUser tokenUser);

    /**
     * 手工匹配-导入查询
     * @param file excel文件
     */
    Result<List<VmsTransactionFlowInvoicePageVo>> readExcel(MultipartFile file);

    /**
     * 审批流程，将发票明细和关联的流水进行处理
     * @param applyId 审批流id
     */
    Result<Object> matchFlowProcess(Long applyId);

    /**
     * 匹配流水-审批人员保存允许差异额
     * @param dto 允许差异额dto
     */
    Result<Object> saveAllowError(VmsMatchAllowErrorDto dto);

}
